package com.uade.servlets;

import java.io.IOException;
import java.util.List;

import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import com.uade.business.BusinessDelegate;
import com.uade.business.BusinessDelegateImpl;
import com.uade.model.Articulo;
import com.uade.model.Compra;
import com.uade.model.Configuracion;
import com.uade.model.Evento;
import com.uade.model.ItemCompra;
import com.uade.model.exceptions.BusinessException;
import com.uade.model.exceptions.LogisticaMonitoreoException;
import com.uade.model.exceptions.NotFoundException;
import com.uade.webservices.logisticaMonitoreo.LogCreator;

/**
 * Servlet implementation class AgregarItemCarritoSrv
 */
public class AgregarItemCarritoSrv extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static Logger log = Logger.getLogger(AgregarConfiguracionSrv.class);

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public AgregarItemCarritoSrv() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		// response.setContentType("text/html");

		try {

			int articuloId = Integer
					.valueOf(request.getParameter("articuloId"));
			int cantidad = Integer.valueOf(request.getParameter("cantidad"));

			BusinessDelegate busDel = BusinessDelegateImpl.getInstance();
			Articulo articulo = busDel.busqueda(articuloId);
			Compra compra = (Compra) request.getSession()
					.getAttribute("compra");
			//Caso de que la compra no exista
			if(null==compra)
				compra=new Compra();
			List<ItemCompra> itemsCompra = compra.getItems();

			ItemCompra item = new ItemCompra();
			item.setArticulo(articulo);
			item.setCantidad(cantidad);

			boolean existeArticulo = false;
			for (ItemCompra itemCompra : itemsCompra) {
				if (itemCompra.getArticulo().getIdProducto() == articulo
						.getIdProducto()) {
					itemCompra.setCantidad(cantidad);
					existeArticulo = true;
				}
			}
			// Comunicacion con Logistica y Monitoreo
			Evento evento = new Evento();
			evento.setIdArticulo(articulo.getNombre());
			evento.setCantidad(String.valueOf(item.getCantidad()));
			if (!existeArticulo) {
				itemsCompra.add(item);

				evento.setAccion("Se agrega articulo: ");
				log.info("Se envia el logeo a logistica y monitoreo: agregar articulo");

			} else {
				evento.setAccion("Se modifica cantidad articulo: ");
				log.info("Se envia el logeo a logistica y monitoreo: modificar cantidad articulo");
			}

			try {
				enviarLog(evento.getXml());
			} catch (Exception e) {
				log.warn("Error en la comunicacion de logueo con logistica y monitoreo"
						+ e.getMessage());
			}

			compra.setItems(itemsCompra);

			// Modifico la compra con el nuevo item
			request.getSession().setAttribute("compra", compra);

			// Devuelvo la lista de articulos
			request.getSession().setAttribute("articulosCompra",
					compra.getItems());
			response.sendRedirect("jsp/ListarComrpaArticulos.jsp");

		} catch (NotFoundException e) {
			request.setAttribute("articulos", null);
			response.sendRedirect("jsp/ListarComrpaArticulos.jsp");
		} catch (NamingException e) {
			e.printStackTrace();
		}

	}

	/**
	 * Obtiene la lista de configuraciones envia los logs a auditoria y
	 * monitoreo
	 * 
	 * @param compra
	 * @throws BusinessException
	 * @throws LogisticaMonitoreoException
	 * @throws NamingException
	 */
	private void enviarLog(String xml) throws BusinessException,
			LogisticaMonitoreoException, NamingException {

		// Obtiene la configuracion
		Configuracion conFiguracion = BusinessDelegateImpl.getInstance()
				.obtenerConfiguracionLogisticaMonitoreoLog();

		if (conFiguracion != null) {

			LogCreator logCreator = new LogCreator();
			logCreator.generarLog(xml, conFiguracion);
		} else {
			log.warn("No existe configuracion para realizar el log de la venta");
		}

	}

}
